package com.bit.springblogdemo.common.util;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

public class SecurityUtils { //密码加密类
    /* 加密
    md5(盐值+明文)
    * return 盐值 + md5(盐值 + 密文)
    * */
    public static String encrypt(String password) {
        String salt = UUID.randomUUID().toString().replace("-", "");//生成盐值
        String securityPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));//md5(盐值 + 密文)
        return salt+securityPassword;//返回加密数据保存到数据库中
    }

    /* 解密
    * 验证
    * 数据库中存储的是  盐值 + md5(盐值 + 密文)*/
    public static boolean verify(String inputPassword,String sqlPassword) {
        if(!StringUtils.hasLength(inputPassword)){
            return false;
        }
        if(sqlPassword==null || sqlPassword.length() != 64){
            return false;
        }
        String salt = sqlPassword.substring(0,32); //拿到盐值   //md5(盐值+明文) 得到新的加密数据
        String securityPassword = DigestUtils.md5DigestAsHex((salt +inputPassword).getBytes(StandardCharsets.UTF_8));
        return sqlPassword.equals(salt+securityPassword);   //这个是salt+ md5(盐值+明文) 去和数据库中的比较是否一样
    }


    public static void main(String[] args) { //测试方法，测试代码逻辑是否正确
        String encrypt = encrypt("123456"); //加密
        System.out.println(encrypt);
        boolean verify = verify("123456",encrypt); //解密
        System.out.println(verify);

    }
}
